#include <linux/cdev.h>
#include <asm-generic/ioctl.h>
#include "command_types.h"

/* кількість символьних пристроїв */
#define NUM_DEV 4

/* розмір обл. пам'яті*/
#define QUANTUM 4000
/* кількість обл. пам'яті в одному вузлі */
#define QUANTUM_NUM 1000

/* реалізація внутрішньої структури ScullDevice */

struct ScullInternalDevice
{
    void **data;
    struct ScullInternalDevice *next;
};

struct ScullDevice
{
    unsigned int quantum; /* розмір обл. пам'яті */
    unsigned int quantum_num; /* розмір масива, який містить quantum */
    struct ScullInternalDevice *internal_device;
    struct cdev cdev; /* символьний пристрій. Інтерфейс для роботи з ядром */
    struct semaphore sem;
    int size;
};

loff_t seek(struct file*, int, int);
int open(struct inode*, struct file*);
ssize_t read(struct file*, char __user *buf, size_t, loff_t*); /* операція читання */
ssize_t write(struct file*, const char __user *buf, size_t, loff_t*); /* операція запису */
long ioctl(struct file*, unsigned int, unsigned long);
